/** node 事件执行顺序 同步任务（宏任务->微任务） ->  异步任务
 * js执行任务栈： 先执行同步任务（先执行宏任务再执行微任务），然后执行异步任务 
 * 宏任务： script脚本  setTimeout  setInterval
 * 微任务： promise.then() then的处理是微任务 process.nextTick()
 * 
 *  */ 

//  promise是同步任务 用于解决异步回调地狱的问题

console.log('start')    // 同步宏任务 1

new Promise((resolve,reject)=>{
    console.log('Promise start')  // 同步宏任务2
    resolve()
}).then(()=>{
    console.log('promise 1')    // 同步 微任务1
})

setTimeout(()=>{        
    console.log('settimeout start')  // 异步宏任务1
    new Promise((resolve,reject)=>{
        console.log('Promise 2')   // 异步宏任务2
        resolve()
    }).then(()=>{
        console.log('promise 3')   // 异步微任务
    })
    setTimeout(()=>{      
        console.log('settimeout 111')   // 二次异步的宏任务 最后执行
    },0)
    console.log('settimeout end')   // 异步宏任务3
},0)

console.log('end')      // 同步宏任务3

